package com.hboxs.asl.wechat.entity;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.hboxs.asl.entity.BaseEntity;
import com.hboxs.asl.entity.Member;

import javax.persistence.*;
import javax.validation.constraints.NotNull;

/**
 * 微信
 */
@Entity
@Table(name = "t_wechat")
@SequenceGenerator(name = "sequenceGenerator", sequenceName = "t_wechat_sequence")
public class Wechat extends BaseEntity {
    private static final long serialVersionUID = -2851265305898779945L;

    /** 微信唯一标识 */
    private String openid;
    /** 调用凭证 */
    private String accessToken;
    /** 超时时间 */
    private Integer expiresIn;
    /** 刷新access_token */
    private String refreshToken;
    /** 授权作用域 */
    private String scope;
    /** 用户 */
    private Member member;
    /** 用户基本信息 */
    private WxUserInfo wxUserInfo;
    /** 用户地理位置 */
    private WxUserLocation wxUserLocation;

    /**
     * 获取用户标识
     *
     * @return 用户标识
     */
    @JsonProperty
    public String getOpenid() {
        return openid;
    }

    /**
     * 设置用户标识
     *
     * @param openid 用户标识
     */
    public void setOpenid(String openid) {
        this.openid = openid;
    }

    /**
     * 获取调用凭证
     * @return 网页授权接口调用凭证,注意：此access_token与基础支持的access_token不同
     */
    public String getAccessToken() {
        return accessToken;
    }

    /**
     * 设置调用凭证
     * @param accessToken 网页授权接口调用凭证,注意：此access_token与基础支持的access_token不同
     */
    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
    }

    /**
     * 获取超时时间
     * @return access_token接口调用凭证超时时间，单位（秒）
     */
    public Integer getExpiresIn() {
        return expiresIn;
    }

    /**
     * 设置超时时间
     * @param expiresIn access_token接口调用凭证超时时间，单位（秒）
     */
    public void setExpiresIn(Integer expiresIn) {
        this.expiresIn = expiresIn;
    }

    /**
     *
     * @return 用户刷新access_token
     */
    public String getRefreshToken() {
        return refreshToken;
    }

    /**
     *
     * @param refreshToken 用户刷新access_token
     */
    public void setRefreshToken(String refreshToken) {
        this.refreshToken = refreshToken;
    }

    /**
     *
     * @return 	用户授权的作用域，使用逗号（,）分隔
     */
    public String getScope() {
        return scope;
    }

    /**
     *
     * @param scope 用户授权的作用域，使用逗号（,）分隔
     */
    public void setScope(String scope) {
        this.scope = scope;
    }

    /**
     * 获取用户
     *
     * @return 用户
     */
    @JoinColumn(name = "member",unique = true)
    @JsonProperty
    @OneToOne(fetch = FetchType.LAZY)
    @NotNull
    public Member getMember() {
        return member;
    }

    /**
     * 设置用户
     *
     * @param member 用户
     */
    public void setMember(Member member) {
        this.member = member;
    }

    /**
     * 获取微信用户基本信息
     *
     * @return 微信用户基本信息
     */
    @JsonProperty
    @OneToOne(fetch = FetchType.LAZY)
    public WxUserInfo getWxUserInfo() {
        return wxUserInfo;
    }

    /**
     * 设置微信用户基本信息
     *
     * @param wxUserInfo 微信用户基本信息
     */
    public void setWxUserInfo(WxUserInfo wxUserInfo) {
        this.wxUserInfo = wxUserInfo;
    }

    /**
     * 获取微信用户地理位置
     *
     * @return 微信用户地理位置
     */
    @JsonProperty
    @OneToOne(fetch = FetchType.LAZY)
    public WxUserLocation getWxUserLocation() {
        return wxUserLocation;
    }

    /**
     * 设置微信用户地理位置
     *
     * @param wxUserLocation 微信用户地理位置
     */
    public void setWxUserLocation(WxUserLocation wxUserLocation) {
        this.wxUserLocation = wxUserLocation;
    }

}
